import os
from jili.core.printlog import print
import swanlab
from jili.tool.pcinfo import get_pcname
from jili.tool.filetool import get_run_filename
from swanlab import Settings
"""
1.完成后通知飞书与企业微信;
"""
class swanlab_tool:#nchjili-jili
    def __init__(self,
        experiment_name=get_pcname(),#(str)实验名称, 如果不指定则取,"swan-1"这样的动物名 + 序号作为实验名。
        description=None,  # (str)实验描述, 如果不指定默认为None。
        project= "huice" ,  #(str)项目名，如果不指定则取运行目录的名称。
        workspace=None,#(str) 工作空间，默认将实验同步到你的个人空间下，如果要上传到组织，则填写组织的username。
        config_info={},#(dict, str)实验配置，在此处可以记录一些实验的超参数等信息。支持传入配置文件路径，支持yaml和json文件。
        logdir="swanlog",#(str) 离线看板日志文件存储路径，默认为swanlog 。
        mode="cloud",#(str) 设置swanlab实验创建的模式，可选cloud、"local"、"disabled"，默认设置为"cloud"。cloud：将实验上传到云端。（公有云和私有化部署）disabled：不上传也不记录。
        load=None,#(str) 加载的配置文件路径，支持yaml和json文件。
        callbacks=[],#(list)设置实验回调函数，支持swankit.callback.SwanKitCallback的子类。
        hardware_monitor=False,
        upload_interval=60,
    ):


        # 创建新的设置对象
        # new_settings = Settings(
        #     metadata_collect=False,
        #     hardware_monitor=False,
        #     upload_interval=5
        # )
        print(swanlab.swanlab_settings.get_settings())
        new_settings = Settings(
            model_config=False,#ConfigDict(frozen=True),#ConfigDict(frozen=True),
            metadata_collect=False,# StrictBool = True,
            collect_hardware=False,# StrictBool = True,
            collect_runtime=False,# StrictBool = True,
            requirements_collect=False,#StrictBool = True,
            conda_collect=False,# StrictBool = False,
            hardware_monitor=False,#: StrictBool = True,
            upload_interval=60# PositiveInt = 1,
        )

        # 更新全局设置
        swanlab.merge_settings(new_settings)
        self.run=swanlab.init(
            experiment_name=experiment_name,
            description=description,
            project=project,
            workspace=workspace,
            config=config_info,
            logdir=logdir,
            mode=mode,
            load=load,
            callbacks=callbacks
        )
        self.fname=get_run_filename()
        print("sys","swanlab_tool init")
    def log(self,info,addfname=True):
        info0={}
        if addfname:
            for k,v in info.items():
                info0[self.fname+"_"+k]=v
        else:
            info0=info
        self.run.log(info0)
    def close(self):
        self.run.finish()


if __name__=="__main__":
    import datetime
    from jili.tool.filetool import get_run_filename
    t0=datetime.datetime.now()

    swanlab_tool0=swanlab_tool()
    t1=datetime.datetime.now()
    print(t1 - t0)
    run_filename = get_run_filename()
    for i in range(100):
        i=i+1
        swanlab_tool0.log({run_filename+"_byobj0":i,run_filename+"_progress0%":100*i/100},addfname=False)
    t2 = datetime.datetime.now()
    swanlab_tool0.close()
    print(t1-t0,t2-t1)